import cn.hutool.core.collection.Tree;
import cn.hutool.core.collection.TreeNode;
import cn.hutool.core.collection.TreeNodeConfig;
import cn.hutool.core.collection.TreeUtil;
import java.util.Arrays;
import java.util.List;

public class TreeExample {
    public static void main(String[] args) {
        // 定义节点数据（增加了额外属性）
        List<TreeNode<String>> nodeList = Arrays.asList(
            new TreeNode<>("1", "0", "系统管理", 1)
                .setExtra("isButton", false)
                .setExtra("nickName", "系统"),
            new TreeNode<>("2", "1", "用户管理", 2)
                .setExtra("isButton", false)
                .setExtra("nickName", "用户"),
            new TreeNode<>("3", "1", "角色管理", 3)
                .setExtra("isButton", false)
                .setExtra("nickName", "角色"),
            new TreeNode<>("4", "2", "添加用户", 4)
                .setExtra("isButton", true)
                .setExtra("nickName", "新增")
        );

        // 配置转换器（可根据需要调整）
        TreeNodeConfig config = new TreeNodeConfig();
        config.setWeightKey("weight"); // 指定权重字段名
        config.setIdKey("id");         // 指定ID字段名
        config.setParentIdKey("parentId"); // 指定父节点ID字段名
        config.setNameKey("name");     // 指定名称字段名
        // 配置其他需要的字段...

        // 构建树结构（将所有额外属性放入extra）
        List<Tree<String>> treeList = TreeUtil.build(nodeList, "0", config,
            (node, tree) -> {
                tree.setId(node.getId());
                tree.setParentId(node.getParentId());
                tree.setName(node.getName());
                tree.setWeight(node.getWeight());
                // 复制所有额外属性
                tree.setExtra(node.getExtra());
            });

        // 打印树结构（调试用）
        System.out.println(treeList);
    }
}